﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace DLGeneric
{
    public class DLContabilidade
    {

        //connection string contabilidade
        string connectionStringContabilidade = Properties.Settings.Default.contabilidade;

        /// <summary>
        /// Actualiza o saldo e remove a licitação do utilizador do leilão
        /// </summary>
        /// <param name="id_user"></param>
        /// <param name="id_leilao"></param>
        /// <returns></returns>
        public bool confirmarLicitacao(int id_user, int id_leilao)
        {
            SqlConnection conn = null;
            SqlDataReader rdr = null;

            try
            {
                conn = new SqlConnection(connectionStringContabilidade);
                conn.Open();
                SqlCommand cmd = new SqlCommand("confirmarLicitacao", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("id_user", id_user);
                cmd.Parameters.AddWithValue("id_leilao", id_leilao);
                rdr = cmd.ExecuteReader();

                return true;

            }
            catch (Exception e)
            {
                Console.WriteLine("Ocorreu um erro na ligação à BD \n " + e.ToString());

                return false;
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
                if (rdr.IsClosed != true) rdr.Close();
            }

        }

        /// <summary>
        /// Estabelece ligação à bd e deposita valor na conta do cliente
        /// </summary>
        /// <param name="id"></param>
        /// <param name="valor"></param>
        /// <returns>devolve o saldo do cliente</returns>
        public double depositar(int id, double valor)
        {
            SqlConnection conn = null;
            SqlDataReader rdr = null;
            double ret = 0.0;

            try
            {
                conn = new SqlConnection(connectionStringContabilidade);
                conn.Open();
                SqlCommand cmd = new SqlCommand("[efetuarDeposito]", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("id_user", id);
                cmd.Parameters.AddWithValue("valor", valor);
                rdr = cmd.ExecuteReader();
                rdr.Read();

                ret = double.Parse(rdr["saldo"].ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("Ocorreu um erro na ligação à BD \n " + e.ToString());
            }
            finally
            {
                if (conn != null) conn.Close();
                if (rdr.IsClosed != true) rdr.Close();
            }

            return ret;
        }

        /// <summary>
        /// Remove as licitações de um utilizador de um leilão
        /// </summary>
        /// <param name="id_user"></param>
        /// <param name="id_leilao"></param>
        /// <returns></returns>
        public bool libertarCativo(int id_user, int id_leilao)
        {
            SqlConnection conn = null;
            SqlDataReader rdr = null;

            try
            {
                conn = new SqlConnection(connectionStringContabilidade);
                conn.Open();
                SqlCommand cmd = new SqlCommand("libertarCativo", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("id_user", id_user);
                cmd.Parameters.AddWithValue("id_leilao", id_leilao);
                rdr = cmd.ExecuteReader();

                return true;

            }
            catch (Exception e)
            {
                Console.WriteLine("Ocorreu um erro na ligação à BD \n " + e.ToString());

                return false;
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
                if (rdr.IsClosed != true) rdr.Close();
            }

        }

        /// <summary>
        /// Licitar num leilao. 
        /// Só licita se tiver saldo disponivel. 
        /// Também tem em conta os valores cativos em licitacoes anteriores.
        /// </summary>
        /// <param name="id"></param>
        /// <returns>Saldo do cliente</returns>
        public bool licitar(int id_user, int id_leilao, double valor)
        {
            SqlConnection conn = null;
            SqlDataReader rdr = null;

            try
            {
                conn = new SqlConnection(connectionStringContabilidade);
                conn.Open();
                SqlCommand cmd = new SqlCommand("licitar", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("id_user", id_user);
                cmd.Parameters.AddWithValue("id_leilao", id_leilao);
                cmd.Parameters.AddWithValue("valor", valor);
                rdr = cmd.ExecuteReader();
                rdr.Read();

                return rdr["rst"].ToString() == "1" ? true : false;
            }
            catch (Exception e)
            {
                Console.WriteLine("Ocorreu um erro na ligação à BD \n " + e.ToString());

                return false;
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
                if (rdr.IsClosed != true) rdr.Close();
            }
        }

        /// <summary>
        /// Estabelece ligação à bd e devolve o saldo do cliente
        /// </summary>
        /// <param name="id"></param>
        /// <returns>Saldo do cliente</returns>
        public string verSaldo(int id_user)
        {
            SqlConnection conn = null;
            SqlDataReader rdr = null;
            string ret = "";

            try
            {
                conn = new SqlConnection(connectionStringContabilidade);
                conn.Open();
                SqlCommand cmd = new SqlCommand("verSaldo", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("id_user", id_user);
                rdr = cmd.ExecuteReader();
                rdr.Read();

                ret = rdr["saldo"].ToString();
            }
            catch (Exception e)
            {
                Console.WriteLine("Ocorreu um erro na ligação à BD \n " + e.ToString());
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
                if (rdr.IsClosed != true) rdr.Close();
            }

            return ret;
        }


    }
}
